home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / jËzyki_programowania / amigae / e_v3.2a / src / various / srcgen.e < prev    next >
Text File  |  1977-12-31  |  16KB  |  440 lines

  1. /* GenGTXSource-E: SrcGen GadToolBox source generator for E
  2.  
  3. You'll be needing GadToolBox v2.0 or higher, and have the gadtoolsbox.library
  4. that comes with it in your LIBS:.  now, with GTB, make some simple example
  5. (just a window with a few gadgets/menus etc.), save it as "bla" (filename will
  6. be "bla.gui"), and type:
  7.  
  8. 1> SrcGen bla
  9. 1> EC bla
  10. 1> bla
  11.  
  12. "bla.e" contains the routines for opening your interface, as well
  13. as some routines to handle idcmpmessages, errors etc., and a dummy
  14. "main" that just waits for one selection. here you can put in
  15. your own code. see the commandline template how to stop SrcGen from
  16. generating these routines.
  17.  
  18. That's all there's to it. If you have problems, just check the
  19. source that has been generated.
  20.  
  21. TODO:
  22.    - check and implement all possible tags
  23.    - open screen.
  24.    - Wait4Message <-> IDCMP
  25.    - Other fonts than topaz-8 as gadgettext
  26.    - hotkey support?
  27.    - In gen of OpeWindowTaglist():  tag "AUTO_ADJUST,1," generated twice.
  28.    - does not generate code for reverse bevel boxes
  29. */
  30.  
  31. OPT OSVERSION=37
  32.  
  33. ENUM NONE,NOMEM,BADARGS,NOGTXLIB,LOADGUI,NOGUI,NOWINDOWS,NOFILEOUT
  34. SET HASGADGETS,HASMENUS
  35.  
  36. MODULE 'gtx', 'gadtoolsbox/forms', 'gadtoolsbox/gui', 'gadtoolsbox/gtxbase',
  37.        'nofrag', 'libraries/gadtools', 'utility', 'intuition/gadgetclass',
  38.        'intuition/intuition'
  39.  
  40. DEF guiptr:guidata,
  41.     wlist:windowlist,
  42.     kinds:PTR TO LONG,
  43.     gttags1:PTR TO LONG,gttags2:PTR TO LONG,gatags:PTR TO LONG,
  44.     pgatags:PTR TO LONG,latags:PTR TO LONG,strtags:PTR TO LONG,
  45.     watags:PTR TO LONG,
  46.     win[100]:LIST,
  47.     infile[100]:STRING,outfile[100]:STRING,
  48.     mainf=TRUE,erf=TRUE,mesf=TRUE,layoutf=TRUE,
  49.     lastkind,wname
  50.  
  51. PROC main() HANDLE
  52.   DEF myargs:PTR TO LONG,rdargs=NIL,chain=NIL,gbase:PTR TO gtxbase,valid=NIL
  53.   myargs:=[0,0,0,0,0]
  54.   IF (rdargs:=ReadArgs('GUIFILE/A,NOMAIN/S,NOERR/S,NOMES/S,NOLAYOUT/S',myargs,NIL))=NIL THEN Raise(BADARGS)
  55.   WriteF('Amiga E GadToolsBox SourceGenerator v0.4 (c) 1993 $#%!\n')
  56.   IF (gtxbase:=OpenLibrary('gadtoolsbox.library',0))=NIL THEN Raise(NOGTXLIB)
  57.   IF myargs[1] THEN mainf:=FALSE    /* generate no PROC main() */
  58.   IF myargs[2] THEN erf:=FALSE      /* no error report function */
  59.   IF myargs[3] THEN mesf:=FALSE     /* no wait4message() */
  60.   IF myargs[4] THEN layoutf:=FALSE  /* no layout: all tags on one line */
  61.   StrCopy(infile,myargs[0],ALL)
  62.   StrCopy(outfile,infile,ALL)
  63.   StrAdd(infile,'.gui',ALL)
  64.   StrAdd(outfile,'.e',ALL)
  65.   gbase:=gtxbase
  66.   nofragbase:=gbase.nofragbase
  67.   utilitybase:=gbase.utilitybase
  68.   IF (chain:=GetMemoryChain(4096))=NIL THEN Raise(NOMEM)
  69.   IF GtX_LoadGUIA(chain,infile,[RG_GUI,guiptr,RG_WINDOWLIST,wlist,RG_VALID,{valid},NIL]) THEN Raise(LOADGUI)
  70.   IF (valid AND VLF_GUI)=0 THEN Raise(NOGUI)
  71.   IF (valid AND VLF_WINDOWLIST)=0 THEN Raise(NOWINDOWS)
  72.   WriteF('Generating source...\n\n')
  73.   generate()
  74.   Raise(NONE)
  75. EXCEPT
  76.   IF valid AND VLF_WINDOWLIST THEN GtX_FreeWindows(chain,wlist)
  77.   IF chain THEN FreeMemoryChain(chain,TRUE)
  78.   IF gtxbase THEN CloseLibrary(gtxbase)
  79.   IF rdargs THEN FreeArgs(rdargs)
  80.   WriteF('\s!\n',ListItem(['Done',
  81.   'Out of Memory',
  82.   'Bad args',
  83.   'Could not open gadtoolsbox library',
  84.   'Problems reading GUI file',
  85.   'missing GUI definition',
  86.   'missing window definitions',
  87.   'problems while writing E source'],exception))
  88. ENDPROC
  89.  
  90. PROC generate()
  91.   DEF fh
  92.   IF ( fh:=Open(outfile,NEWFILE) )=NIL THEN Raise(NOFILEOUT)
  93.   fh:=SetStdOut(fh)
  94.   initlists()
  95.   WriteF('/* E Source generated by SRCGEN v0.1 */\n\nOPT OSVERSION=37\n\n' +
  96.          'MODULE ''gadtools'',''libraries/gadtools'',''intuition/intuition' +
  97.          ''',\n       ''intuition/screens'', ''intuition/gadgetclass'', ''graphics/text''\n\n'+
  98.          'ENUM NONE,NOCONTEXT,NOGADGET,NOWB,NOVISUAL,OPENGT,NOWINDOW,NOMENUS\n\n')
  99.   WriteF('DEF')
  100.   checkwindows()
  101.   IF mesf THEN WriteF('\tinfos:PTR TO gadget,\n')
  102.   WriteF('\tscr:PTR TO screen,\n\tvisual=NIL,\n\toffx,offy,tattr\n\n')
  103.   genscreenstuff()
  104.   genwindows()
  105.   genmain()
  106.   Close(SetStdOut(fh))
  107. ENDPROC
  108.  
  109. PROC genwindows()
  110.   DEF w:PTR TO projectwindow,wnum=0
  111.   w:=wlist.first
  112.   WHILE w.next
  113.     wname:=w.name
  114.     lastkind:=-1
  115.     WriteF('PROC open\swindow()\n',wname)
  116.     WriteF('  DEF g:PTR TO gadget\n')
  117.     WriteF('  IF (g:=CreateContext({\sglist}))=NIL THEN RETURN NOCONTEXT\n',wname)
  118.     gengadgets(w)
  119.     IF win[wnum] AND HASMENUS
  120.       WriteF('  IF (\smenus:=CreateMenusA([',wname)
  121.       genmenus(w.menus)
  122.       WriteF('0,0,0,0,0,0,0]:newmenu,NIL))=NIL THEN RETURN NOMENUS\n')
  123.       WriteF('  IF LayoutMenusA(\smenus,visual,NIL)=FALSE THEN RETURN NOMENUS\n',wname)
  124.     ENDIF
  125.     WriteF('  IF (\swnd:=OpenWindowTagList(NIL,',wname)
  126.     WriteF(IF layoutf THEN '\n    [' ELSE '[')
  127.     createtags(w.tags)
  128.     IF win[wnum] AND HASGADGETS
  129.       WriteF('WA_GADGETS,\sglist,',wname)
  130.       IF layoutf THEN WriteF('\n     ')
  131.     ENDIF
  132.     WriteF('NIL]))=NIL THEN RETURN NOWINDOW\n')
  133.     IF w.windowtext THEN gentexts(w.windowtext)
  134.     genboxes(w)
  135.     IF win[wnum] AND HASMENUS
  136.       WriteF('  IF SetMenuStrip(\swnd,\smenus)=FALSE THEN RETURN NOMENUS\n',wname,wname)
  137.     ENDIF
  138.     WriteF('  Gt_RefreshWindow(\swnd,NIL)\n',wname)
  139.     WriteF('ENDPROC\n\nPROC close\swindow()\n',wname)
  140.     IF win[wnum] AND HASMENUS
  141.       WriteF('  IF \swnd THEN ClearMenuStrip(\swnd)\n',wname,wname)
  142.       WriteF('  IF \smenus THEN FreeMenus(\smenus)\n',wname,wname)
  143.     ENDIF
  144.     WriteF('  IF \swnd THEN CloseWindow(\swnd)\n',wname,wname)
  145.     WriteF('  IF \sglist THEN FreeGadgets(\sglist)\n',wname,wname)
  146.     WriteF('ENDPROC\n\n')
  147.     w:=w.next
  148.     INC wnum
  149.   ENDWHILE
  150. ENDPROC
  151.  
  152. PROC gengadgets(w:PTR TO projectwindow)
  153.   DEF egl:PTR TO extgadgetlist,eng:PTR TO extnewgadget,ng:PTR TO newgadget,kind
  154.   egl:=w.gadgets; eng:=egl.first
  155.   IF eng=NIL THEN RETURN
  156.   WHILE eng.next
  157.     ng:=eng.newgadget                     /* offx,offy */
  158.     kind:=eng.kind
  159.     WriteF('  IF (g:=CreateGadgetA(\s,g,',kinds[kind])
  160.     IF layoutf THEN WriteF('\n    ')
  161.     WriteF('[offx+\d,offy+\d,\d,\d,''\s'',' +
  162.            'tattr,\d,\d,visual,0]:newgadget,',
  163.            ng.leftedge,ng.topedge,ng.width,ng.height,ng.gadgettext,
  164.            ng.gadgetid,ng.flags)
  165.     WriteF(IF layoutf THEN '\n    [' ELSE '[')
  166.     createtags(eng.tags)
  167.     WriteF('NIL]))=NIL THEN RETURN NOGADGET\n')
  168.     lastkind:=kind
  169.     eng:=eng.next
  170.   ENDWHILE
  171. ENDPROC
  172.  
  173. PROC genmenus(eml:PTR TO extmenulist)
  174.   DEF enm:PTR TO extnewmenu,nm:PTR TO newmenu,ckey[10]:STRING
  175.   enm:=eml.first
  176.   IF enm=NIL THEN RETURN
  177.   WHILE enm.next
  178.     nm:=enm.newmenu
  179.     IF nm.commkey THEN StringF(ckey,'''\s''',nm.commkey) ELSE StrCopy(ckey,'0',ALL)
  180.     WriteF('\d,0,',nm.type)
  181.     WriteF(IF StrCmp(enm.menutitle,'NM_BARLABEL') THEN '-1' ELSE '''\s''',enm.menutitle)
  182.     WriteF(',\s,$\h,\d,\d,',ckey,nm.flags,nm.mutualexclude,nm.userdata)
  183.     IF layoutf THEN WriteF('\n    ')
  184.     IF enm.items THEN genmenus(enm.items)
  185.     enm:=enm.next
  186.   ENDWHILE
  187. ENDPROC
  188.  
  189. PROC gentexts(i:PTR TO intuitext)
  190.   WriteF('  PrintIText(\swnd.rport,',wname)
  191.   IF layoutf THEN WriteF('\n    ')
  192.   WriteF('[\d,\d,\d,\d,\d,tattr,''\s'',NIL]' +
  193.          ':intuitext,offx,offy)\n',i.frontpen,i.backpen,
  194.          i.drawmode,i.leftedge,i.topedge,i.itext)
  195.   IF i.nexttext THEN gentexts(i.nexttext)
  196. ENDPROC
  197.  
  198. PROC genboxes(w:PTR TO projectwindow)
  199.   DEF bl:PTR TO bevellist,bb:PTR TO bevelbox
  200.   bl:=w.boxes; bb:=bl.first
  201.   IF bb=NIL THEN RETURN
  202.   WHILE bb.next
  203.     WriteF('  DrawBevelBoxA(\swnd.rport,\d+offx,\d+offy,\d,\d,',wname,bb.left,bb.top,bb.width,bb.height)
  204.     IF layoutf THEN WriteF('\n    ')
  205.     WriteF('[GT_VISUALINFO,visual,')
  206.     IF bb.flags AND BBF_RECESSED THEN WriteF('GTBB_RECESSED,1,')
  207.     WriteF('NIL])\n')
  208.     bb:=bb.next
  209.   ENDWHILE
  210. ENDPROC
  211.  
  212. PROC createtags(taglist)
  213.   DEF tag:PTR TO LONG,item,str1=NIL,v:PTR TO LONG,type=0
  214.   WHILE tag:=NextTagItem({taglist})
  215.     item:=tag[0]
  216.     IF (item>GT_TAGBASE) AND (GT_TAGBASE+65>item)
  217.       item:=item-GT_TAGBASE
  218.       IF (item>=4) AND (item<=24)
  219.         item:=item-4*2
  220.         str1:=gttags1[item]
  221.         type:=gttags1[item+1]
  222.       ELSEIF (item>=38) AND (item<=64)
  223.         item:=item-38*2
  224.         str1:=gttags2[item]
  225.         type:=gttags2[item+1]
  226.       ENDIF
  227.     ELSEIF (item>GA_DUMMY) AND (GA_DUMMY+25>item)
  228.       item:=item-GA_DUMMY-1*2
  229.       str1:=gatags[item]
  230.       type:=gatags[item+1]
  231.     ELSEIF (item>PGA_DUMMY) AND (PGA_DUMMY+11>item)
  232.       item:=item-PGA_DUMMY-1*2
  233.       str1:=pgatags[item]
  234.       type:=pgatags[item+1]
  235.     ELSEIF (item>STRINGA_DUMMY) AND (STRINGA_DUMMY+$13>item)
  236.       item:=item-STRINGA_DUMMY-1*2
  237.       str1:=strtags[item]
  238.       type:=strtags[item+1]
  239.     ELSEIF (item>LAYOUTA_DUMMY) AND (LAYOUTA_DUMMY+25>item)
  240.       item:=item-LAYOUTA_DUMMY-1*2
  241.       str1:=latags[item]
  242.       type:=latags[item+1]
  243.     ELSEIF (item>=$80000064) AND (item<=$80000092)
  244.       item:=item-$80000064*2
  245.       str1:=watags[item]
  246.       type:=watags[item+1]
  247.     ENDIF
  248.     WriteF(IF str1 THEN str1 ELSE '$\h',tag[0])
  249.     WriteF(',')
  250.     v:=tag[1]
  251.     /* 0=num, 1=(list), 2=array of text, 3=text, 4="NIL", 5="tattr", 6="visual"
  252.        7="g/NIL", 8=(ptr to menu), 9="scr", 10="_", 11="+offx", 12="+offy" */
  253.     SELECT type
  254.       CASE 0
  255.         WriteF(IF (v>=-100) AND (v<=500) THEN '\d' ELSE '$\h',v)
  256.       CASE 2
  257.         WriteF('[')
  258.         WHILE v[]
  259.           WriteF('''\s'',',v[])
  260.           v++
  261.         ENDWHILE
  262.         WriteF('0]')
  263.       CASE 3;  WriteF('''\s''',v)
  264.       CASE 5;  WriteF('tattr')
  265.       CASE 6;  WriteF('visual')
  266.       CASE 7;  WriteF(IF lastkind=STRING_KIND THEN 'g' ELSE 'NIL')
  267.       CASE 9;  WriteF('scr')
  268.       CASE 10; WriteF('"_"')
  269.       CASE 11; WriteF('offx+\d',v)
  270.       CASE 12; WriteF('offy+\d',v)
  271.       DEFAULT; WriteF('NIL')
  272.     ENDSELECT
  273.     WriteF(',')
  274.     IF layoutf THEN WriteF('\n     ')
  275.   ENDWHILE
  276. ENDPROC
  277.  
  278. PROC checkwindows()
  279.   DEF w:PTR TO projectwindow,wname,fl,x
  280.   w:=wlist.first
  281.   WHILE w.next
  282.     wname:=w.name
  283.     LowerStr(wname)
  284.     fl:=0
  285.     WriteF('\t\swnd:PTR TO window,\n',wname)
  286.     x:=Long(w.menus)
  287.     IF ^x
  288.       fl:=HASMENUS
  289.       WriteF('\t\smenus,\n',wname)
  290.     ENDIF
  291.     x:=Long(w.gadgets)
  292.     IF ^x
  293.       fl:=fl OR HASGADGETS
  294.     ENDIF
  295.     WriteF('\t\sglist,\n',wname)
  296.     ListAdd(win,[fl],ALL)
  297.     w:=w.next
  298.   ENDWHILE
  299. ENDPROC
  300.  
  301. PROC genscreenstuff()
  302.   WriteF('PROC setupscreen()\n  IF (gadtoolsbase:=OpenLibrary(''gadtools' +
  303.     '.library'',37))=NIL THEN RETURN OPENGT\n  IF (scr:=LockPubScreen(''' +
  304.     'Workbench''))=NIL THEN RETURN NOWB\n  IF (visual:=GetVisualInfoA(sc' +
  305.     'r,NIL))=NIL THEN RETURN NOVISUAL\n  offy:=scr.wbortop+Int(scr.rastp' +
  306.     'ort+58)-10\n  tattr:=[''topaz.font'',8,0,0]:textattr\nENDPROC\n\nPR' +
  307.     'OC closedownscreen()\n  IF visual THEN FreeVisualInfo(visual)\n  IF' +
  308.     ' scr THEN UnlockPubScreen(NIL,scr)\n  IF gadtoolsbase THEN CloseLib' +
  309.     'rary(gadtoolsbase)\nENDPROC\n\n')
  310. ENDPROC
  311.  
  312. PROC genmain()
  313.   DEF w:PTR TO projectwindow,wname
  314.   IF mesf
  315.     WriteF('PROC wait4message(win:PTR TO window)\n' +
  316.       '  DEF mes:PTR TO intuimessage,type\n' +
  317.       '  REPEAT\n' +
  318.       '    type:=0\n' +
  319.       '    IF mes:=Gt_GetIMsg(win.userport)\n' +
  320.       '      type:=mes.class\n' +
  321.       '      IF type=IDCMP_MENUPICK\n' +
  322.       '        infos:=mes.code\n' +
  323.       '      ELSEIF (type=IDCMP_GADGETDOWN) OR (type=IDCMP_GADGETUP)\n' +
  324.       '        infos:=mes.iaddress\n' +
  325.       '      ELSEIF type=IDCMP_REFRESHWINDOW\n' +
  326.       '        Gt_BeginRefresh(win)\n' +
  327.       '        Gt_EndRefresh(win,TRUE)\n' +
  328.       '        type:=0\n' +
  329.       '      ELSEIF type<>IDCMP_CLOSEWINDOW  /* remove these if you like */\n' +
  330.       '        type:=0\n' +
  331.       '      ENDIF\n' +
  332.       '      Gt_ReplyIMsg(mes)\n' +
  333.       '    ELSE\n' +
  334.       '      WaitPort(win.userport)\n' +
  335.       '    ENDIF\n' +
  336.       '  UNTIL type\n' +
  337.       'ENDPROC type\n\n')
  338.   ENDIF
  339.   IF erf
  340.     WriteF('PROC reporterr(er)\n  DEF erlist:PTR TO LONG\n  IF er\n' +
  341.       '    erlist:=[''get context'',''create gadget'',''lock wb'',''get visual' +
  342.       ' infos'',\n      ''open "gadtools.library" v37+'',''open window'',''create menus'']\n' +
  343.       '    EasyRequestArgs(0,[20,0,0,''Could not \\s!'',''ok''],0,[erlist[er-1]])\n' +
  344.       '  ENDIF\nENDPROC er\n\n')
  345.   ENDIF
  346.   IF mainf
  347.     WriteF('PROC main()\n  ')
  348.     WriteF(IF erf THEN 'IF reporterr(setupscreen())=0\n' ELSE 'IF setupscreen()=0\n')
  349.     w:=wlist.first
  350.     WHILE w.next
  351.       wname:=w.name
  352.       WriteF(IF erf THEN '    reporterr(open\swindow())\n' ELSE '    open\swindow()\n',wname)
  353.       WriteF(IF mesf THEN '    wait4message(\swnd)\n' ELSE '    Delay(500)\n',wname)
  354.       WriteF('    close\swindow()\n',wname)
  355.       WriteF('    IF CtrlC() THEN BRA x\n')
  356.       w:=w.next
  357.     ENDWHILE
  358.     WriteF('  ENDIF\n  x: closedownscreen()\nENDPROC\n\n')
  359.   ENDIF
  360. ENDPROC
  361.  
  362. PROC initlists()
  363.  
  364.   kinds:=['GENERIC_KIND','BUTTON_KIND','CHECKBOX_KIND','INTEGER_KIND',
  365.           'LISTVIEW_KIND','MX_KIND','NUMBER_KIND','CYCLE_KIND','PALETTE_KIND',
  366.           'SCROLLER_KIND','RESERVED_KIND','SLIDER_KIND','STRING_KIND','TEXT_KIND']
  367.  
  368.   /* GT_TAGBASE 4-23 */
  369.  
  370.   gttags1:=['GTCB_CHECKED',0,'GTLV_TOP',0,'GTLV_LABELS',1,'GTLV_READONLY',0,
  371.             'GTLV_SCROLLWIDTH',0,'GTMX_LABELS',2,'GTMX_ACTIVE',0,'GTTX_TEXT',3,
  372.             'GTTX_COPYTEXT',0,'GTNM_NUMBER',0,'GTCY_LABELS',2,'GTCY_ACTIVE',0,
  373.             'GTPA_DEPTH',0,'GTPA_COLOR',0,'GTPA_COLOROFFSET',0,
  374.             'GTPA_INDICATORWIDTH',0,'GTPA_INDICATORHEIGHT',0,'GTSC_TOP',0,
  375.             'GTSC_TOTAL',0,'GTSC_VISIBLE',0]
  376.  
  377.   /* GT_TAGBASE 38-64 */
  378.  
  379.   gttags2:=['GTSL_MIN',0,'GTSL_MAX',0,'GTSL_LEVEL',0,'GTSL_MAXLEVELLEN',0,
  380.             'GTSL_LEVELFORMAT',3,'GTSL_LEVELPLACE',0,'GTSL_DISPFUNC',4,
  381.             'GTST_STRING',3,'GTST_MAXCHARS',0,'GTIN_NUMBER',0,
  382.             'GTIN_MAXCHARS',0,'GTMN_TEXTATTR',5,'GTMN_FRONTPEN',0,
  383.             'GTBB_RECESSED',0,'GT_VISUALINFO',6,'GTLV_SHOWSELECTED',7,
  384.             'GTLV_SELECTED',0,'GT_RESERVED0',0,'GT_RESERVED1',0,
  385.             'GTTX_BORDER',0,'GTNM_BORDER',0,'GTSC_ARROWS',0,'GTMN_MENU',8,
  386.             'GTMX_SPACING',0,'GTMN_FULLMENU',0,'GTMN_SECONDARYERROR',4,
  387.             'GT_UNDERSCORE',10]
  388.  
  389.   /* GA_DUMMY 1-$24 */
  390.  
  391.   gatags:=['GA_LEFT',0,'GA_RELRIGHT',0,'GA_TOP',0,'GA_RELBOTTOM',0,
  392.            'GA_WIDTH',0,'GA_RELWIDTH',0,'GA_HEIGHT',0,'GA_RELHEIGHT',0,
  393.            'GA_TEXT',0,'GA_IMAGE',0,'GA_BORDER',0,'GA_SELECTRENDER',0,
  394.            'GA_HIGHLIGHT',0,'GA_DISABLED',0,'GA_GZZGADGET',0,'GA_ID',0,
  395.            'GA_USERDATA',0,'GA_SPECIALINFO',0,'GA_SELECTED',0,
  396.            'GA_ENDGADGET',0,'GA_IMMEDIATE',0,'GA_RELVERIFY',0,
  397.            'GA_FOLLOWMOUSE',0,'GA_RIGHTBORDER',0,'GA_LEFTBORDER',0,
  398.            'GA_TOPBORDER',0,'GA_BOTTOMBORDER',0,'GA_TOGGLESELECT',0,
  399.            'GA_SYSGADGET',0,'GA_SYSGTYPE',0,'GA_PREVIOUS',0,'GA_NEXT',0,
  400.            'GA_DRAWINFO',0,'GA_INTUITEXT',0,'GA_LABELIMAGE',0,'GA_TABCYCLE',0]
  401.  
  402.   /* PGADUMMY, 1-$A */
  403.  
  404.   pgatags:=['PGA_FREEDOM',0,'PGA_BORDERLESS',0,'PGA_HORIZPOT',0,
  405.             'PGA_HORIZBODY',0,'PGA_VERTPOT',0,'PGA_VERTBODY',0,'PGA_TOTAL',0,
  406.             'PGA_VISIBLE',0,'PGA_TOP',0,'PGA_NEWLOOK',0]
  407.  
  408.   /* STRINGA_DUMMY, 1-$13 */
  409.  
  410.   strtags:=['STRINGA_MAXCHARS',0,'STRINGA_BUFFER',0,'STRINGA_UNDOBUFFER',0,
  411.             'STRINGA_WORKBUFFER',0,'STRINGA_BUFFERPOS',0,'STRINGA_DISPPOS',0,
  412.             'STRINGA_ALTKEYMAP',0,'STRINGA_FONT',0,'STRINGA_PENS',0,
  413.             'STRINGA_ACTIVEPENS',0,'STRINGA_EDITHOOK',0,'STRINGA_EDITMODES',0,
  414.             'STRINGA_REPLACEMODE',0,'STRINGA_FIXEDFIELDMODE',0,
  415.             'STRINGA_NOFILTERMODE',0,'STRINGA_JUSTIFICATION',0,
  416.             'STRINGA_LONGVAL',0,'STRINGA_TEXTVAL',0,'STRINGA_EXITHELP',0]
  417.  
  418.   /* LAYOUTA_DUMMY 1-3 */
  419.  
  420.   latags:=['LAYOUTA_LAYOUTOBJ',0,'LAYOUTA_SPACING',0,'LAYOUTA_ORIENTATION',0]
  421.  
  422.   /* $8000000, $64-$92 */
  423.  
  424.   watags:=['WA_LEFT',0,'WA_TOP',0,'WA_WIDTH',11,'WA_HEIGHT',12,'WA_DETAILPEN',0,
  425.            'WA_BLOCKPEN',0,'WA_IDCMP',0,'WA_FLAGS',0,'WA_GADGETS',0,
  426.            'WA_CHECKMARK',0,'WA_TITLE',3,'WA_SCREENTITLE',0,
  427.            'WA_CUSTOMSCREEN',9,'WA_SUPERBITMAP',0,'WA_MINWIDTH',0,
  428.            'WA_MINHEIGHT',0,'WA_MAXWIDTH',0,'WA_MAXHEIGHT',0,'WA_INNERWIDTH',0,
  429.            'WA_INNERHEIGHT',0,'WA_PUBSCREENNAME',0,'WA_PUBSCREEN',0,
  430.            'WA_PUBSCREENFALLBACK',0,'WA_WINDOWNAME',0,'WA_COLORS',0,
  431.            'WA_ZOOM',0,'WA_MOUSEQUEUE',0,'WA_BACKFILL',0,'WA_RPTQUEUE',0,
  432.            'WA_SIZEGADGET',0,'WA_DRAGBAR',0,'WA_DEPTHGADGET',0,
  433.            'WA_CLOSEGADGET',0,'WA_BACKDROP',0,'WA_REPORTMOUSE',0,
  434.            'WA_NOCAREREFRESH',0,'WA_BORDERLESS',0,'WA_ACTIVATE',0,
  435.            'WA_RMBTRAP',0,'WA_WBENCHWINDOW',0,'WA_SIMPLEREFRESH',0,
  436.            'WA_SMARTREFRESH',0,'WA_SIZEBRIGHT',0,'WA_SIZEBBOTTOM',0,
  437.            'WA_AUTOADJUST',0,'WA_GIMMEZEROZERO',0,'WA_MENUHELP',0]
  438.  
  439. ENDPROC
  440.