11 lines
13 KiB
JSON
11 lines
13 KiB
JSON
{
|
|
"header": {
|
|
"version": 1,
|
|
"type": "record"
|
|
},
|
|
"body": {
|
|
"record1": {
|
|
"<1>": "declare subroutine set_list_box_data, utility, obj_Appwindow, Comm_Prod_Spec_SI, Set_Property\r\ndeclare function set_property, fieldcount, center_window, send_event, prod_spec_comm\r\ndeclare function memberof\r\n$insert quote_spec_equ\r\n$insert lsl_common\r\n$insert logical\r\n$insert PS_Equates\r\n\r\n$INSERT MSG_EQUATES\r\n$INSERT SECURITY_RIGHTS_EQU\r\n$INSERT POPUP_EQUATES\r\n$INSERT RDS_EQU\r\n$INSERT REACT_RUN_EQUATES\r\n\r\nEQU CRLF$ TO CHAR(13):CHAR(10)\r\n\r\nEQU SUB_INFO$\tTO 1\r\nEQU EPI_INFO$\tTO 2\r\nEQU ADDL_INFO$\tTO 3\r\nEQU NEW_DEV$\tTO 4\r\nEQU PRE_PROD$\tTO 5\r\n\t\t\t\t\r\n\r\nRDSWarnFlag\t\t= FALSE$\r\nSpecInstFlag\t= FALSE$\r\n\r\n\r\nSaveCheckControls = ''\r\n\r\nComm_Prod_Spec_SI('Create',CreateParam)\r\nSet_Property(@WINDOW:'.GROUP_3','ENABLED',0)\r\n\t\r\nSet_Property(@WINDOW, '@HOLDVAR', CreateParam)\r\n\r\nSubstrateInfo = field( CreateParam, char(244), 1 )\r\nEpiInfo = field( CreateParam, char(244), 2 )\r\nAddlInfo = field( CreateParam, char(244), 3 )\r\nNDInfo = field( CreateParam, char(244), 4 )\r\nPPInfo = field( CreateParam, char(244), 5 )\r\n\r\nCONVERT @SVM TO '' IN EpiInfo\r\n\r\n\r\n* WE KNOW THAT WE NO LONGER HAVE SEP LAYERS BUT DO ALLOW SAME LAYERS\r\n* SO COUNT CHAR(248) \r\n\r\nNumLayers = fieldcount(EpiInfo,char(247))\r\nFirstLayer = field( EpiInfo, char(247), 1 )\r\n\r\nButtonText = .same_reactor_button->text\r\n.same_reactor_button->text = fieldcount( FirstLayer, char(248) ):' ':ButtonText\r\n\r\nFirstLayer = field(FirstLayer,char(248),1)\r\n\r\n\r\nVoid = set_property( @window, '@CurSepLayer', 1 )\r\nVoid = set_property( @window, '@EpiInfo', EpiInfo )\r\nVoid = set_property( @window, '@OrigEpiInfo', EpiInfo )\r\n***********************************************************************\r\nControls = 'SUB_ORIENTATION/SUB_TYPE/SUB_WAFERSIZE/SUB_RESISTIVITY/SUB_REST_UNITS/'\r\nControls:= 'SUB_DOPANT/SUB_PRE_CLEAN/SUB_BL1_DOPANT/SUB_BL2_DOPANT/'\r\nControls:= 'SUB_OXIDE/SUB_POST_CLEAN/SUB_BACKSEAL/SUB_WAFERMFG/SUB_SUBSTRATETYPE/'\r\nControls:= 'SUB_INSTRUCTIONS/BLANK_NOT_USED/SUB_WAF_SUP_BY/SPEC_TYPE/SUB_POLISH/SUB_PRODUCTS/'\r\nControls:= 'SUB_BL3_DOPANT/SUB_OXIDE_ANG/PRECLEAN_AKRIONRECIPES/POSTCLEAN_AKRIONRECIPES/SUB_THICKNESS'\r\n\r\n* SUB WAFER MFG HAS BEEN MOVED TO THE PSN MAIN WINDOW TO ALLOW MULTIPLE MFGS FOR DIFFERENT SUB PART NUMS\r\n* 3/6/01 BRYCE MEEK IF ADDING A NEW FIELD TO THIS WINDOW \"SUB_WAFERMFG\" IS AVAIL JUST RENAME\r\n* THE CONTROL \"SUB_WAFERMFG\" ON THE FORM WILL BE SET TO INVISIBLE\r\n\r\nswap '/' with @rm:@window:'.' in Controls\r\nControls = @window:'.':Controls\r\nSaveCheckControls = Controls\r\nVoid = set_property( @window, '@SubControls', Controls )\r\nSubPromptCnt = fieldcount( Controls, @rm )\r\n* so set_property does not propagate\r\nValueCnt = fieldcount( SubstrateInfo, @vm )\r\nif ValueCnt < SubPromptCnt then\r\n SubstrateInfo := str( @vm, SubPromptCnt-ValueCnt - (SubstrateInfo='') )\r\nend\r\n* ok\r\nif SubstrateInfo<1,QSSubProduct$> = '' then\r\n * DEFAULT TO SILICON EPI ON THE PRODUCT\r\n SubstrateInfo<1,QSSubProduct$> = 'SiEpi' \r\nend\r\nif SubstrateInfo<1,QSSubSubstrate$> = '' then\r\n * DEFAULT TO SILICON FOR THE SUBSTRATE\r\n SubstrateInfo<1,QSSubSubstrate$> = 'Silicon'\r\nend\r\nVoid = set_property( @window, '@OrigSubstrateInfo', SubstrateInfo )\r\nconvert @vm to @rm in SubstrateInfo\r\nVoid = set_property( Controls, 'INVALUE', SubstrateInfo )\r\n***********************************************************************\r\n* now load the additional information\r\nControls = 'PROVEIN_INST/STRESS_MEASURE/TRANS_MEASURE/STRESS_MIN/'\r\nControls:= 'STRESS_MAX/TRANS_SPEC/'\r\n\r\nswap '/' with @rm:@window:'.' in Controls\r\nControls = @window:'.':Controls\r\nSaveCheckControls := @rm:@window:'.PROVEIN_INST':@rm:@window:'.STRESS_MEASURE'\r\nSaveCheckControls := @rm:@window:'.TRANS_MEASURE':@rm:@window:'.STRESS_MIN'\r\nSaveCheckControls := @rm:@window:'.STRESS_MAX':@rm:@window:'.TRANS_SPEC'\r\nVoid = set_property( @window, '@AddlControls', Controls )\r\nAddlPromptCnt = fieldcount( Controls, @rm )\r\n* so set_property does not propagate\r\nValueCnt = fieldcount( AddlInfo, @vm )\r\nif ValueCnt < AddlPromptCnt then\r\n AddlInfo := str( @vm, AddlPromptCnt-ValueCnt - (AddlInfo = '') )\r\nend\r\n*\r\nVoid = set_property( @window, '@OrigAddlInfo', AddlInfo )\r\nconvert @vm to @rm in AddlInfo\r\nVoid = set_property( Controls, 'INVALUE', AddlInfo )\r\n\r\n\r\n***********************************************************************\t\t\t\r\n\r\n* now load the EPI specific prompts\r\n\r\nControls = 'EPI_CONC_MIN_THICK/EPI_CONC_MAX_THICK/EPI_CONC_UNITS/'\r\nControls:= 'EPI_RES_MIN_THICK/EPI_RES_MAX_THICK/EPI_RES_UNITS/EPI_MIN_THICK/'\r\nControls:= 'EPI_MAX_THICK/EPI_THICK_UNITS/EPI_DOPANT/EPI_RECIPE/EPI_RECIPE_NAME/'\r\nControls:= 'EPI_THICKMEASURE/EPI_RESMEASURE/EPI_CONMEASURE'\r\n\r\nswap '/' with @rm:@window:'.' in Controls\r\nControls = @window:'.':Controls\r\nSaveCheckControls = Controls:@rm:SaveCheckControls\r\nVoid = set_property( @window, '@EpiControls', Controls )\r\n\r\nEpiPromptCnt = fieldcount( Controls, @rm )\r\nVoid = set_property( @window, '@EpiPromptCnt', EpiPromptCnt )\r\nValueCnt = fieldcount( FirstLayer, @vm )\r\n* so set_property does not propagate\r\nif ValueCnt < EpiPromptCnt then\r\n FirstLayer := str( @vm, EpiPromptCnt-ValueCnt - (FirstLayer = '') )\r\nend\r\n* ok\r\nconvert @vm to @rm in FirstLayer\r\nVoid = set_property( Controls, 'INVALUE':@rm:'INVALUE':@rm:'INVALUE', FirstLayer )\r\nVoid = set_property( @window, '@SaveCheckControls', SaveCheckControls )\r\nVoid = set_property( @window, '@SaveCheckControlData', get_property( SaveCheckControls, 'INVALUE' ) )\r\n*\r\n***********************************************************************\t\t\t\r\n* now load the new development specific prompts\r\nControls = 'ND_INST_OBS/ND_EXP_PLAN/ND_TEST_RESULTS/ND_SPECIAL_INST'\r\nswap '/' with @rm:@window:'.' in Controls\r\nControls = @window:'.':Controls\r\nVoid = set_property( @window, '@NDControls', Controls )\r\nNDPromptCnt = fieldcount( Controls, @rm )\r\nVoid = set_property( @window, '@NDPromptCnt', NDPromptCnt )\r\nValueCnt = fieldcount( NDInfo, @vm )\r\n* so set_property does not propagate\r\nif ValueCnt < NDPromptCnt then\r\n NDInfo := str( @vm, NDPromptCnt-ValueCnt - (NDInfo = '') )\r\nend\r\nVoid = set_property( @window, '@OrigNDInfo', NDInfo )\r\nconvert @vm to @rm in NDInfo\r\nVoid = set_property( Controls, 'INVALUE', NDInfo )\r\n***********************************************************************\r\n* now load the pre production specific prompts\r\nControls = 'PP_INST_OBS/PP_SPECIAL_INST/PP_PROVEIN_INST'\r\nswap '/' with @rm:@window:'.' in Controls\r\nControls = @window:'.':Controls\r\nVoid = set_property( @window, '@PPControls', Controls )\r\nPPPromptCnt = fieldcount( Controls, @rm )\r\nVoid = set_property( @window, '@PPPromptCnt', PPPromptCnt )\r\nValueCnt = fieldcount( PPInfo, @vm )\r\n* so set_property does not propagate\r\nif ValueCnt < PPPromptCnt then\r\n PPInfo := str( @vm, PPPromptCnt-ValueCnt - (PPInfo = '') )\r\nend\r\nVoid = set_property( @window, '@OrigPPInfo', PPInfo )\r\nconvert @vm to @rm in PPInfo\r\nVoid = set_property( Controls, 'INVALUE', PPInfo )\r\n***********************************************************************\r\nset_list_box_data( @window )\r\n\r\nvoid = Set_Property(@WINDOW:'.EPI_CONC_UNITS','LIST','cm-3')\r\nvoid = Set_Property(@WINDOW:'.EPI_RES_UNITS','LIST','ê-cm':@FM:'ê/Ü')\r\nvoid = Set_Property(@WINDOW:'.EPI_THICK_UNITS','LIST','æm':@FM:'Â')\r\n\r\n\r\nif get_property( 'PROD_SPEC', 'QBFLIST' ) <> '' then\r\n .spec_prev_fix->enabled = 1\r\n .spec_next_fix->enabled = 1\r\nend\r\nif .pre_qual_signature->text = '' then\r\n .spec_type->value = ''\r\nend\r\nreturn 0\r\n\r\n*=============================================================================*\r\nTabSetup:\r\n\t* tab controls must start with \"PAGE_\" and end with \"_TAB\" with a number in\r\n\t* between representing the page number associated with the tab\r\n\tequ TAB_PREFIX$ to \"PAGE_\"\r\n\tequ TAB_SUFFIX$ to \"_TAB\"\r\n\r\n\t* any control that should appear on all pages should end with \"_FIX\"\r\n\tequ FIX_SUFFIX$ to \"_FIX\"\r\n\r\n\t* put up hourglass during processing\r\n\tUtility(\"CURSOR\", \"H\")\r\n\r\n\t* build list of properties to set; setting multiple properties at once is\r\n\t* faster than setting them individually\r\n\tCtrls = \"\"\r\n\tProps = \"\"\r\n\tVals = \"\"\r\n\r\n\t* get list of all controls on the window\r\n\tCtrlList = Get_Property(@window, \"CTRLMAP\")\r\n\tcCtrls = count(CtrlList, @fm) + (CtrlList # \"\")\r\n\tTabList = \"\"\r\n\r\n\tfor iCtrl = 1 to cCtrls\r\n\t Ctrl = CtrlList<iCtrl>\r\n\r\n\t * is the control \"fixed\"? (ie. should it appear on every page)\r\n\t if Ctrl [neg(len(FIX_SUFFIX$)), len(FIX_SUFFIX$)] = FIX_SUFFIX$ then\r\n\t * by setting the list of pages to \"-1\", the control will appear on each page\r\n\t Ctrls := Ctrl : @rm\r\n\t Props := \"PAGELIST\": @rm\r\n\t Vals := -1 : @rm\r\n\t end\r\n\r\n\t * is the control a tab?\r\n\t if Ctrl [index(Ctrl, \".\", 1) + 1, len(TAB_PREFIX$)] = TAB_PREFIX$ and Ctrl [neg(len(TAB_SUFFIX$)), len(TAB_SUFFIX$)] = TAB_SUFFIX$ then\r\n\t * build a list of tabs (all tab processing is done later)\r\n\t TabList<-1> = Ctrl\r\n\t end\r\n\tnext iCtrl\r\n\r\n\t* get control structures and tab order for each of the tabs\r\n\tconvert @fm to @rm in TabList\r\n\tcTabs = count(TabList, @rm) + (TabList # \"\")\r\n\tList = Get_Property(TabList: @rm: TabList: @rm: TabList, str(\"ORIG_STRUCT\": @rm, cTabs): str(\"PREVIOUS\": @rm, cTabs): str(@rm: \"NEXT\", cTabs) [2,9999])\r\n\tStructList = field(List, @rm, 1, cTabs)\r\n\tPrevList = field(List, @rm, cTabs + 1, cTabs)\r\n\tNextList = field(List, @rm, cTabs * 2 + 1, cTabs)\r\n\tconvert @rm to @fm in TabList\r\n\tconvert @rm to @fm in StructList\r\n\tconvert @rm to @fm in PrevList\r\n\tconvert @rm to @fm in NextList\r\n\r\n\t* page tab processing\r\n\tfor iTab = 1 to cTabs\r\n\t Tab = TabList<iTab>\r\n\r\n\t * page tabs require two pieces of work to be done:\r\n\t * (1) the tab is placed on the form as a check-box; a check-box has an\r\n\t * \"up\" (off) and a \"down\" (on) state but it is not related to any\r\n\t * other controls (the other tabs); to relate the tabs such that only\r\n\t * one can be \"down\" at a time, each tab must be destroyed and recreated\r\n\t * as a radio button (only one radio button can be selected at a time);\r\n\t * (2) each page has a circular tab order; this means that you tab from the\r\n\t * page tab to the first control on the page through the last control on\r\n\t * the page and back to the page tab; since you can not set up multiple\r\n\t * separate tab orders using the form designer, you must specify the tab\r\n\t * order in the form designer in the following manner: page-tab 1,\r\n\t * controls on page 1, page-tab 2, controls on page 2, etc.; this event\r\n\t * handler will then dynamically rearrange the tabs\r\n\r\n\t * destroy checkbox\r\n\t Utility(\"DESTROY\", Tab)\r\n\r\n\t * change structure to specify radio button\r\n\t StructList<iTab,PSPOS_TYPE$> = PSCTL_RADIOBMP$\r\n\t StructList<iTab,PSPOS_VALUE$> = (iTab = 1)\r\n\r\n\t * after the new tab (radio button) is created, set it to clip its image,\r\n\t * draw the tab \"label\", and appear on every page\r\n\t Ctrls := Tab : @rm: Tab : @rm: Tab : @rm\r\n\t Props := \"IMAGECLIP\": @rm: \"DRAWTEXT\": @rm: \"PAGELIST\": @rm\r\n\t Vals := 1 : @rm: 1 : @rm: -1 : @rm\r\n\r\n\t * re-arrange tab order\r\n\t * the first control on page n (where n is the page represented by the tab\r\n\t * control being processed) is the NEXT property of the tab; the last control\r\n\t * on page (n-1) is the PREVIOUS property of the tab except if n=1 then the\r\n\t * PREVIOUS property represents the last control on the last page of the form\r\n\t if iTab = cTabs then\r\n\t NextPage = 1\r\n\t end else\r\n\t NextPage = iTab + 1\r\n\t end\r\n\r\n\t * circularly link the tabs with their pages\r\n\t Ctrls := Tab : @rm: Tab : @rm\r\n\t Props := \"PREVIOUS\" : @rm: \"NEXT\" : @rm\r\n\t Vals := PrevList<NextPage>: @rm: NextList<iTab>: @rm\r\n\tnext iTab\r\n\r\n\t* create radio buttons to replace checkboxes\r\n\tUtility(\"CREATE\", StructList)\r\n\r\n\t* set min-scroll pos equal to max scroll pos to hide scroll bar\r\n\tVPos = 1: @fm: 1: @fm: 1\r\n\r\n\t* hide the scroll bar, make the window visible, and start on the first page\r\n\tCtrls := @window : @rm: @window : @rm: \"SYSTEM\"\r\n\tProps := \"VPOSITION\": @rm: \"VISIBLE\": @rm: \"FOCUS\"\r\n\tVals := VPos : @rm: TRUE$ : @rm: TabList<1>\r\n\r\n\t* set all properties at once\r\n\tVoid = Set_Property(Ctrls, Props, Vals)\r\n \r\n Void = send_event( @window, 'CLEAR' )\r\n\t* restore cursor\r\n\tUtility(\"CURSOR\", \"A\")\r\nreturn\r\n*=============================================================================*"
|
|
}
|
|
}
|
|
} |