//#CTL2 integer count; map[integer, integer] type_sum; map[integer, integer] type_threshold; map[integer, integer] type_order; type_sum[-1] = 0; type_threshold[-1] = 0; type_order[-1] = 0; type_sum[1] = 0; type_threshold[1] = 100; type_order[1] = 1; type_sum[2] = 0; type_threshold[2] = 100; type_order[2] = 2; type_sum[3] = 0; type_threshold[3] = 100; type_order[3] = 3; function integer append() { count = find($in.0.line, '\QINCLUDE\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QINCLUDE\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QADD\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QCALL\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QCLOSE\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QCOMPUTE\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QDATA\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QDATA DIVISION\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 100;} count = find($in.0.line, '\QDISPLAY\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QDIVIDE\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QELSE\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QEND-IF\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QEXAMINE\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 20;} count = find($in.0.line, '\QEXEC\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QEXIT\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 20;} count = find($in.0.line, '\QFILE\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QGO TO\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QGOBACK\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QID DIVISION\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 20;} count = find($in.0.line, '\QIDENTIFICATION DIVISION\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 20;} count = find($in.0.line, '\QIF\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QINCLUDE\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QINSPECT\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QMOVE\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QMULTIPLY\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QOCCURS\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QOPEN\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QPERFORM\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QPIC\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 20;} count = find($in.0.line, '\QPIC 9\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 20;} count = find($in.0.line, '\QPIC X\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 20;} count = find($in.0.line, '\QPICTURE\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 20;} count = find($in.0.line, '\QPROCEDURE DIVISION\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 20;} count = find($in.0.line, '\QREAD\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QRECORD\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QREDEFINES\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QSUBTRACT\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QVALUE\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QWORKING-STORAGE SECTION\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 20;} count = find($in.0.line, '\QWRITE\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 5;} count = find($in.0.line, '\QPROGRAM-ID\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 20;} count = find($in.0.line, '\QSORT\E').length(); if(count > 0) { type_sum[1] = type_sum[1] + count * 20;} count = find($in.0.line, '\s*PROC\s+MEMBER').length(); if(count > 0) { type_sum[2] = type_sum[2] + count * 10;} count = find($in.0.line, 'CLASS\=').length(); if(count > 0) { type_sum[2] = type_sum[2] + count * 10;} count = find($in.0.line, 'DCB\=').length(); if(count > 0) { type_sum[2] = type_sum[2] + count * 10;} count = find($in.0.line, 'DD DSN\=').length(); if(count > 0) { type_sum[2] = type_sum[2] + count * 10;} count = find($in.0.line, 'DISP\=').length(); if(count > 0) { type_sum[2] = type_sum[2] + count * 10;} count = find($in.0.line, '\QEXEC\E').length(); if(count > 0) { type_sum[2] = type_sum[2] + count * 5;} count = find($in.0.line, '\QJCLLIB\E').length(); if(count > 0) { type_sum[2] = type_sum[2] + count * 10;} count = find($in.0.line, '\QJOB\E').length(); if(count > 0) { type_sum[2] = type_sum[2] + count * 10;} count = find($in.0.line, 'PGM\=').length(); if(count > 0) { type_sum[2] = type_sum[2] + count * 10;} count = find($in.0.line, '\QPROC\E').length(); if(count > 0) { type_sum[2] = type_sum[2] + count * 10;} count = find($in.0.line, 'PROG\=').length(); if(count > 0) { type_sum[2] = type_sum[2] + count * 10;} count = find($in.0.line, 'SPACE\=').length(); if(count > 0) { type_sum[2] = type_sum[2] + count * 10;} count = find($in.0.line, 'SYSOUT\=').length(); if(count > 0) { type_sum[2] = type_sum[2] + count * 10;} count = find($in.0.line, 'SYSPRINT\=').length(); if(count > 0) { type_sum[2] = type_sum[2] + count * 10;} count = find($in.0.line, 'UNIT\=').length(); if(count > 0) { type_sum[2] = type_sum[2] + count * 10;} count = find($in.0.line, '^//').length(); if(count > 0) { type_sum[2] = type_sum[2] + count * 10;} count = find($in.0.line, '^V\/\/').length(); if(count > 0) { type_sum[2] = type_sum[2] + count * 10;} count = find($in.0.line, '^\/\*').length(); if(count > 0) { type_sum[2] = type_sum[2] + count * 10;} count = find($in.0.line, '^V\/\/\*').length(); if(count > 0) { type_sum[2] = type_sum[2] + count * 10;} count = find($in.0.line, ';\n').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\QADDR\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\QBASED\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\QBIT\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 10;} count = find($in.0.line, '\bBIT\(').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 10;} count = find($in.0.line, '\QCALL\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\QCHAR\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 10;} count = find($in.0.line, '\bCHAR\(').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 10;} count = find($in.0.line, '\QDCL\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 20;} count = find($in.0.line, '\QDO\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\bDO\;').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 10;} count = find($in.0.line, '\bEDIT\(').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\QELSE\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\bEND\;').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\QEND-IF\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\QFILE\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\QFILE RECORD\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 20;} count = find($in.0.line, '\QFILE STREAM\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\QFIXED\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 10;} count = find($in.0.line, '\QGO TO\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\QIF\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\QINCLUDE\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\QINIT\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\bLENGTH\(').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\QOPTIONS\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\QOTHERWISE\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\QPROC\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\QPUT\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\bRETURN\(').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\QSTATIC\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\QSUBSTR\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 10;} count = find($in.0.line, '\bSUBSTR\(').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 10;} count = find($in.0.line, '\bTRANSFORM\(').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 10;} count = find($in.0.line, '\QWHEN\E').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\bWHEN\(').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\b\+INCLUDE').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\b\-INCLUDE').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '^V\/\*').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 5;} count = find($in.0.line, '\s*DBDNAME\s+').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 10;} count = find($in.0.line, '\s*DCL\s+SYSPRINT\s+').length(); if(count > 0) { type_sum[3] = type_sum[3] + count * 50;} return OK; } function integer transform() { map[string, integer] emptyMap; $out.0.resultMap = emptyMap; $out.0.uniqueFilePath = getParamValue('IN_FILE_URL'); integer highest = 0; integer threshold=100; //unknown default value $out.0.typeId = getParamValue('FILE_TYPE_UNKNOWN_ID').str2integer(); foreach (integer id: getKeys(type_sum)) { if (type_sum[id]>0) { $out.0.resultMap[num2str(id)] = type_sum[id]; if (type_sum[id] > type_threshold[id] and type_sum[id] > highest) { highest = type_sum[id]; $out.0.typeId = id; } } } if ((getParamValue('DETAIL_SCORES').lowerCase() == 'unknown' and $out.0.typeId == getParamValue('FILE_TYPE_UNKNOWN_ID').str2integer()) or getParamValue('DETAIL_SCORES').lowerCase() == 'yes') { dictionary.detail = true; } else { dictionary.detail = false; } printLog(info,"Final sums:" + join(',',type_sum)); return OK; }